Skip to content

add upcaster extension#192

Merged
DavidBadura merged 1 commit into
1.24.xfrom
upcaster
Jun 13, 2026
Merged

add upcaster extension#192
DavidBadura merged 1 commit into
1.24.xfrom
upcaster

Conversation

@DavidBadura

@DavidBadura DavidBadura commented May 2, 2026

Copy link
Copy Markdown
Member

Currently, we have the upcasting feature for events in https://github.com/patchlevel/event-sourcing. I think this would be a good extension for the Hydrator.

@DavidBadura DavidBadura added the enhancement New feature or request label May 2, 2026
@github-actions

github-actions Bot commented May 2, 2026

Copy link
Copy Markdown

Hello 👋

here is the most recent benchmark result:

HydratorWithLazyBench
=====================

+------------------------------------------+--------------------+--------------------+-----------------+------------+
|                                          | time (kde mode)                         | memory                       |
+------------------------------------------+--------------------+--------------------+-----------------+------------+
| subject                                  | Tag: <current>     | Tag: base          | Tag: <current>  | Tag: base  |
+------------------------------------------+--------------------+--------------------+-----------------+------------+
| benchHydrate1Object ()                   | 1.000μs (±0.00%)   | 0.600μs (±0.00%)   | 2.803mb         | 3.252mb    |
| benchHydrate1ObjectTriggerInit ()        | 5.000μs (±0.00%)   | 4.600μs (±0.00%)   | 2.803mb         | 3.252mb    |
| benchHydrate1000Objects ()               | 499.667μs (±0.00%) | 488.333μs (±0.00%) | 2.809mb         | 2.809mb    |
| benchHydrate1000ObjectsTriggerInit ()    | 3.435ms (±0.00%)   | 3.451ms (±0.00%)   | 2.813mb         | 2.813mb    |
| benchHydrate1000000Objects ()            | 321.241ms (±0.00%) | 318.916ms (±0.00%) | 2.809mb         | 2.809mb    |
| benchHydrate1000000ObjectsTriggerInit () | 2.284s (±0.00%)    | 2.271s (±0.00%)    | 2.812mb         | 2.812mb    |
+------------------------------------------+--------------------+--------------------+-----------------+------------+

StackHydratorWithCryptographyBench
==================================

+-------------------------------+------------------+------------------+-----------------+------------+
|                               | time (kde mode)                     | memory                       |
+-------------------------------+------------------+------------------+-----------------+------------+
| subject                       | Tag: <current>   | Tag: base        | Tag: <current>  | Tag: base  |
+-------------------------------+------------------+------------------+-----------------+------------+
| benchHydrate1Object ()        | 5.400μs (±0.00%) | 5.600μs (±0.00%) | 2.797mb         | 2.797mb    |
| benchExtract1Object ()        | 5.000μs (±0.00%) | 5.400μs (±0.00%) | 2.797mb         | 2.797mb    |
| benchHydrate1000Objects ()    | 3.712ms (±0.00%) | 3.655ms (±0.00%) | 2.964mb         | 2.964mb    |
| benchExtract1000Objects ()    | 3.467ms (±0.00%) | 3.537ms (±0.00%) | 2.977mb         | 2.977mb    |
| benchHydrate1000000Objects () | 2.249s (±0.00%)  | 2.307s (±0.00%)  | 3.084mb         | 3.084mb    |
| benchExtract1000000Objects () | 2.218s (±0.00%)  | 2.199s (±0.00%)  | 2.974mb         | 2.974mb    |
+-------------------------------+------------------+------------------+-----------------+------------+

HydratorWithCryptographyBench
=============================

+-------------------------------+-------------------+-------------------+-----------------+------------+
|                               | time (kde mode)                       | memory                       |
+-------------------------------+-------------------+-------------------+-----------------+------------+
| subject                       | Tag: <current>    | Tag: base         | Tag: <current>  | Tag: base  |
+-------------------------------+-------------------+-------------------+-----------------+------------+
| benchHydrate1Object ()        | 91.000μs (±0.00%) | 99.200μs (±0.00%) | 2.887mb         | 2.887mb    |
| benchExtract1Object ()        | 10.200μs (±0.00%) | 10.200μs (±0.00%) | 2.798mb         | 2.798mb    |
| benchHydrate1000Objects ()    | 4.584ms (±0.00%)  | 4.664ms (±0.00%)  | 3.076mb         | 3.076mb    |
| benchExtract1000Objects ()    | 6.180ms (±0.00%)  | 6.229ms (±0.00%)  | 2.975mb         | 2.975mb    |
| benchHydrate1000000Objects () | 2.725s (±0.00%)   | 2.731s (±0.00%)   | 3.077mb         | 3.077mb    |
| benchExtract1000000Objects () | 4.244s (±0.00%)   | 4.274s (±0.00%)   | 2.975mb         | 2.975mb    |
+-------------------------------+-------------------+-------------------+-----------------+------------+

StackHydratorBench
==================

+-------------------------------+-------------------+-------------------+-----------------+------------+
|                               | time (kde mode)                       | memory                       |
+-------------------------------+-------------------+-------------------+-----------------+------------+
| subject                       | Tag: <current>    | Tag: base         | Tag: <current>  | Tag: base  |
+-------------------------------+-------------------+-------------------+-----------------+------------+
| benchHydrate1Object ()        | 4.000μs (±0.00%)  | 4.000μs (±0.00%)  | 2.804mb         | 2.804mb    |
| benchExtract1Object ()        | 65.800μs (±0.00%) | 67.200μs (±0.00%) | 2.804mb         | 2.804mb    |
| benchHydrate1000Objects ()    | 2.628ms (±0.00%)  | 2.600ms (±0.00%)  | 3.011mb         | 3.011mb    |
| benchExtract1000Objects ()    | 2.318ms (±0.00%)  | 2.310ms (±0.00%)  | 2.935mb         | 2.935mb    |
| benchHydrate1000000Objects () | 1.536s (±0.00%)   | 1.592s (±0.00%)   | 3.011mb         | 3.011mb    |
| benchExtract1000000Objects () | 1.439s (±0.00%)   | 1.453s (±0.00%)   | 2.935mb         | 2.935mb    |
+-------------------------------+-------------------+-------------------+-----------------+------------+

HydratorBench
=============

+-------------------------------+------------------+------------------+-----------------+------------+
|                               | time (kde mode)                     | memory                       |
+-------------------------------+------------------+------------------+-----------------+------------+
| subject                       | Tag: <current>   | Tag: base        | Tag: <current>  | Tag: base  |
+-------------------------------+------------------+------------------+-----------------+------------+
| benchHydrate1Object ()        | 4.400μs (±0.00%) | 4.000μs (±0.00%) | 2.803mb         | 2.803mb    |
| benchExtract1Object ()        | 4.200μs (±0.00%) | 4.000μs (±0.00%) | 2.803mb         | 2.803mb    |
| benchHydrate1000Objects ()    | 2.717ms (±0.00%) | 2.651ms (±0.00%) | 2.869mb         | 2.869mb    |
| benchExtract1000Objects ()    | 2.400ms (±0.00%) | 2.431ms (±0.00%) | 2.829mb         | 2.829mb    |
| benchHydrate1000000Objects () | 1.500s (±0.00%)  | 1.570s (±0.00%)  | 2.869mb         | 2.869mb    |
| benchExtract1000000Objects () | 1.408s (±0.00%)  | 1.413s (±0.00%)  | 2.829mb         | 2.829mb    |
+-------------------------------+------------------+------------------+-----------------+------------+

This comment gets update everytime a new commit comes in!

@DavidBadura DavidBadura added this to the 1.24.0 milestone May 2, 2026
@DavidBadura DavidBadura marked this pull request as ready for review June 13, 2026 08:56
@DavidBadura DavidBadura changed the title POC: add upcaster extension add upcaster extension Jun 13, 2026
@DavidBadura DavidBadura requested a review from DanielBadura June 13, 2026 08:59

@DanielBadura DanielBadura left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks all and all good to me.
From event sourcing perspective: What about the case moving event data into header data or the other way around?

@DavidBadura

Copy link
Copy Markdown
Member Author

I am not sure whether it is that easy to implement, especially regarding performance, lazy loading, and cryptography.

We would need to look at this problem in the context of event sourcing.

@DavidBadura DavidBadura merged commit b33d9f9 into 1.24.x Jun 13, 2026
15 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants